
Security News
Deno 2.2 Improves Dependency Management and Expands Node.js Compatibility
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Super easy declarative CLI framework with a single configuration object and a single function call.
Super easy declarative CLI framework with a single configuration object and a single function call.
There are so many command line interface libraries around that it's hard to find the right one for your needs. But there aren't many that expose a single function with a single config object like most other Node.js packages do. That's why there is make-cli
! Call a single function, pass a single config object and you're good to go.
Based on Commander.js and supports most of its features. In case you're missing something, feel free to open up an issue.
# npm
$ npm install make-cli
# Yarn
$ yarn add make-cli
Create a .js
file with Shebang and import make-cli
. Then configure your command line tool like so:
// cli.js
#!/usr/bin/env node
import makeCli from 'make-cli'
makeCli({
version: '0.1.0',
name: 'my-cli',
usage: 'Usage description here',
arguments: '<remote> [extra]',
options: [
{
name: '-y, --yes',
description: 'Skip questions',
},
{
name: '--value <value>',
description: 'Specifies the value',
defaultValue: 'foo',
choices: ['foo', 'bar'],
},
],
action: (remote, extra, options) => {
// options.value and options.yes
// contain the options.
},
})
Give it execution rights via chmod +x cli.js
.
Then you can call it via the shell of your choice:
$ ./cli.js --yes
$ ./cli.js foo
$ ./cli.js --help
$ ./cli.js --version
When publishing your command line tool via NPM, you'll probably want to add the file to the bin property, so it's installed to node_modules/.bin
.
{
"name": "my-cli",
"bin": "./cli.js"
}
It is possible to define subcommands like so:
makeCli({
commands: [
{
name: 'push',
description: 'Pushes to the repo',
arguments: '<remote>',
options: [
{
name: '-y, --yes',
},
],
handler: (remote, options) => { /* push the stuff */ },
},
{
name: 'pull',
// ...
},
],
})
Then you can call it:
$ ./cli.js push origin
Instead of an array you can declare options and commands as objects, which is sometimes more convenient:
makeCli({
options: [
'-y, --yes': { description: 'Skip questions' },
'--value <value>': {
description: 'Specifies the value',
defaultValue: 'foo',
choices: ['foo', 'bar'],
},
],
commands: {
push: {
description: 'Pushes to the repo',
arguments: '<remote>',
options: [
{
name: '-y, --yes',
},
],
handler: (remote, options) => { /* ... */ },
},
pull: () => { /* ... */ },
}
})
You can also allow to pass unknown options, which are then available in the action like so:
#!/usr/bin/env node
import makeCli from 'make-cli'
makeCli({
// ...
allowUnknownOption: true,
options: [
{
name: '-y, --yes',
description: 'Skip questions',
},
],
action: (options, command) => {
// options.yes = true
// command.args = ['--foo']
},
})
If you now run $ ./cli.js --yes --foo
, command.args
will contain ['--foo']
.
Are you missing something or want to contribute? Feel free to file an issue or a pull request! ⚙️
Hey, I am Sebastian Landwehr, a freelance web developer, and I love developing web apps and open source packages. If you want to support me so that I can keep packages up to date and build more helpful tools, you can donate here:
If you want to send me a one time donation. The coffee is pretty good 😊.
Also for one time donations if you like PayPal.
Here you can support me regularly, which is great so I can steadily work on projects.
Thanks a lot for your support! ❤️
FAQs
Super easy declarative CLI framework with a single configuration object and a single function call.
The npm package make-cli receives a total of 416 weekly downloads. As such, make-cli popularity was classified as not popular.
We found that make-cli demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Security News
React's CRA deprecation announcement sparked community criticism over framework recommendations, leading to quick updates acknowledging build tools like Vite as valid alternatives.
Security News
Ransomware payment rates hit an all-time low in 2024 as law enforcement crackdowns, stronger defenses, and shifting policies make attacks riskier and less profitable.